
<!DOCTYPE html>
<html lang="en" class="loading">
<head><meta name="generator" content="Hexo 3.9.0">
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>Docker常见命令 - kyralo</title>
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
    <meta name="google" content="notranslate">
    <meta name="keywords" content="kyralo,"> 
    <meta name="description" content="容器相关操作创建一个容器但是不启动它docker create创建并启动一个容器docker run停止容器运行，发送信号SIGTERMdocker stop启动一个停止状态的容器docker st,"> 
    <meta name="author" content="kyralo"> 
    
    <link rel="icon" href="https://cdn.jsdelivr.net/gh/kyralo/cdn/ico/favicon.ico"> 
    <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kyralo/cdn@v1.0.2/css/diaspora.css">
    <!-- <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> -->
    <script>
         (adsbygoogle = window.adsbygoogle || []).push({
              google_ad_client: "ca-pub-8691406134231910",
              enable_page_level_ads: true
         });
    </script>
    <!-- <script async custom-element="amp-auto-ads"
        src="https://cdn.ampproject.org/v0/amp-auto-ads-0.1.js">
    </script> -->
</head>
</html>
<body class="loading">
    <span id="config-title" style="display:none">kyralo</span>
    <div id="loader"></div>
    <div id="single">
    <div id="top" style="display: block;">
    <div class="bar" style="width: 0;"></div>
    <a class="icon-home image-icon" href="javascript:;" data-url="https://kyralo.github.io"></a>
    <!-- <div title="播放/暂停" class="icon-play"></div> -->
    <h3 class="subtitle">Docker常见命令</h3>
    <div class="social">
        <div>
            <div class="share">
                <a title="获取二维码" class="icon-scan" href="javascript:;"></a>
            </div>
            <div id="qr"></div>
        </div>
    </div>
    <div class="scrollbar"></div>
</div>

    <div class="section">
        <div class="article">
    <div class='main'>
        <h1 class="title">Docker常见命令</h1>
        <div class="stuff">
            <span>九月 03, 2019</span>
            
  <ul class="post-tags-list"><li class="post-tags-list-item"><a class="post-tags-list-link" href="/tags/Docker/">Docker</a></li><li class="post-tags-list-item"><a class="post-tags-list-link" href="/tags/Java/">Java</a></li></ul>


        </div>
        <div class="content markdown">
            <h3 id="容器相关操作"><a href="#容器相关操作" class="headerlink" title="容器相关操作"></a>容器相关操作</h3><h4 id="创建一个容器但是不启动它"><a href="#创建一个容器但是不启动它" class="headerlink" title="创建一个容器但是不启动它"></a>创建一个容器但是不启动它</h4><pre><code>docker create</code></pre><h4 id="创建并启动一个容器"><a href="#创建并启动一个容器" class="headerlink" title="创建并启动一个容器"></a>创建并启动一个容器</h4><pre><code>docker run</code></pre><h4 id="停止容器运行，发送信号SIGTERM"><a href="#停止容器运行，发送信号SIGTERM" class="headerlink" title="停止容器运行，发送信号SIGTERM"></a>停止容器运行，发送信号SIGTERM</h4><pre><code>docker stop</code></pre><h4 id="启动一个停止状态的容器"><a href="#启动一个停止状态的容器" class="headerlink" title="启动一个停止状态的容器"></a>启动一个停止状态的容器</h4><pre><code>docker start</code></pre><h4 id="重启一个容器"><a href="#重启一个容器" class="headerlink" title="重启一个容器"></a>重启一个容器</h4><pre><code>docker restart</code></pre><h4 id="删除一个容器"><a href="#删除一个容器" class="headerlink" title="删除一个容器"></a>删除一个容器</h4><pre><code>docker rm</code></pre><h4 id="发送信号给容器，默认SIGKILL"><a href="#发送信号给容器，默认SIGKILL" class="headerlink" title="发送信号给容器，默认SIGKILL"></a>发送信号给容器，默认SIGKILL</h4><pre><code>docker kill</code></pre><h4 id="连接-进入-到一个正在运行的容器"><a href="#连接-进入-到一个正在运行的容器" class="headerlink" title="连接(进入)到一个正在运行的容器"></a>连接(进入)到一个正在运行的容器</h4><pre><code>docker attach</code></pre><h4 id="阻塞到一个容器，直到容器停止运行"><a href="#阻塞到一个容器，直到容器停止运行" class="headerlink" title="阻塞到一个容器，直到容器停止运行"></a>阻塞到一个容器，直到容器停止运行</h4><pre><code>docker wait</code></pre><h4 id="获取容器相关信息"><a href="#获取容器相关信息" class="headerlink" title="获取容器相关信息"></a>获取容器相关信息</h4><h4 id="显示状态为运行（Up）的容器"><a href="#显示状态为运行（Up）的容器" class="headerlink" title="显示状态为运行（Up）的容器"></a>显示状态为运行（Up）的容器</h4><pre><code>docker ps</code></pre><h4 id="显示所有容器-包括运行中（Up）的和退出的-Exited"><a href="#显示所有容器-包括运行中（Up）的和退出的-Exited" class="headerlink" title="显示所有容器,包括运行中（Up）的和退出的(Exited)"></a>显示所有容器,包括运行中（Up）的和退出的(Exited)</h4><pre><code>docker ps -a</code></pre><h4 id="深入容器内部获取容器所有信息"><a href="#深入容器内部获取容器所有信息" class="headerlink" title="深入容器内部获取容器所有信息"></a>深入容器内部获取容器所有信息</h4><pre><code>docker inspect</code></pre><h4 id="查看容器的日志-stdout-stderr"><a href="#查看容器的日志-stdout-stderr" class="headerlink" title="查看容器的日志(stdout/stderr)"></a>查看容器的日志(stdout/stderr)</h4><pre><code>docker logs</code></pre><h4 id="得到docker服务器的实时的事件"><a href="#得到docker服务器的实时的事件" class="headerlink" title="得到docker服务器的实时的事件"></a>得到docker服务器的实时的事件</h4><pre><code>docker events</code></pre><h4 id="显示容器的端口映射"><a href="#显示容器的端口映射" class="headerlink" title="显示容器的端口映射"></a>显示容器的端口映射</h4><pre><code>docker port</code></pre><h4 id="显示容器的进程信息"><a href="#显示容器的进程信息" class="headerlink" title="显示容器的进程信息"></a>显示容器的进程信息</h4><pre><code>docker top</code></pre><h4 id="显示容器文件系统的前后变化"><a href="#显示容器文件系统的前后变化" class="headerlink" title="显示容器文件系统的前后变化"></a>显示容器文件系统的前后变化</h4><pre><code>docker diff</code></pre><h4 id="导出容器"><a href="#导出容器" class="headerlink" title="导出容器"></a>导出容器</h4><h4 id="从容器里向外拷贝文件或目录"><a href="#从容器里向外拷贝文件或目录" class="headerlink" title="从容器里向外拷贝文件或目录"></a>从容器里向外拷贝文件或目录</h4><pre><code>docker cp</code></pre><h4 id="将容器整个文件系统导出为一个tar包，不带layers、tag等信息"><a href="#将容器整个文件系统导出为一个tar包，不带layers、tag等信息" class="headerlink" title="将容器整个文件系统导出为一个tar包，不带layers、tag等信息"></a>将容器整个文件系统导出为一个tar包，不带layers、tag等信息</h4><pre><code>docker export</code></pre><h4 id="执行"><a href="#执行" class="headerlink" title="执行"></a>执行</h4><h4 id="在容器里执行一个命令，可以执行bash进入交互式"><a href="#在容器里执行一个命令，可以执行bash进入交互式" class="headerlink" title="在容器里执行一个命令，可以执行bash进入交互式"></a>在容器里执行一个命令，可以执行bash进入交互式</h4><pre><code>docker exec</code></pre><h3 id="镜像操作"><a href="#镜像操作" class="headerlink" title="镜像操作"></a>镜像操作</h3><h4 id="显示本地所有的镜像列表"><a href="#显示本地所有的镜像列表" class="headerlink" title="显示本地所有的镜像列表"></a>显示本地所有的镜像列表</h4><pre><code>docker images</code></pre><h4 id="从一个tar包创建一个镜像，往往和export结合使用"><a href="#从一个tar包创建一个镜像，往往和export结合使用" class="headerlink" title="从一个tar包创建一个镜像，往往和export结合使用"></a>从一个tar包创建一个镜像，往往和export结合使用</h4><pre><code>docker import</code></pre><h4 id="使用Dockerfile创建镜像（推荐）"><a href="#使用Dockerfile创建镜像（推荐）" class="headerlink" title="使用Dockerfile创建镜像（推荐）"></a>使用Dockerfile创建镜像（推荐）</h4><pre><code>docker build</code></pre><h4 id="从容器创建镜像"><a href="#从容器创建镜像" class="headerlink" title="从容器创建镜像"></a>从容器创建镜像</h4><pre><code>docker commit</code></pre><h4 id="删除一个镜像"><a href="#删除一个镜像" class="headerlink" title="删除一个镜像"></a>删除一个镜像</h4><pre><code>docker rmi</code></pre><h4 id="从一个tar包创建一个镜像，和save配合使用"><a href="#从一个tar包创建一个镜像，和save配合使用" class="headerlink" title="从一个tar包创建一个镜像，和save配合使用"></a>从一个tar包创建一个镜像，和save配合使用</h4><pre><code>docker load</code></pre><h4 id="将一个镜像保存为一个tar包，带layers和tag信息"><a href="#将一个镜像保存为一个tar包，带layers和tag信息" class="headerlink" title="将一个镜像保存为一个tar包，带layers和tag信息"></a>将一个镜像保存为一个tar包，带layers和tag信息</h4><pre><code>docker save</code></pre><h4 id="显示生成一个镜像的历史命令"><a href="#显示生成一个镜像的历史命令" class="headerlink" title="显示生成一个镜像的历史命令"></a>显示生成一个镜像的历史命令</h4><pre><code>docker history</code></pre><h4 id="为镜像起一个别名"><a href="#为镜像起一个别名" class="headerlink" title="为镜像起一个别名"></a>为镜像起一个别名</h4><pre><code>docker tag</code></pre><h3 id="镜像仓库-registry-操作"><a href="#镜像仓库-registry-操作" class="headerlink" title="镜像仓库(registry)操作"></a>镜像仓库(registry)操作</h3><h4 id="登录到一个registry"><a href="#登录到一个registry" class="headerlink" title="登录到一个registry"></a>登录到一个registry</h4><pre><code>docker login</code></pre><h4 id="从registry仓库搜索镜像"><a href="#从registry仓库搜索镜像" class="headerlink" title="从registry仓库搜索镜像"></a>从registry仓库搜索镜像</h4><pre><code>docker search</code></pre><h4 id="从仓库下载镜像到本地"><a href="#从仓库下载镜像到本地" class="headerlink" title="从仓库下载镜像到本地"></a>从仓库下载镜像到本地</h4><pre><code>docker pull</code></pre><h4 id="将一个镜像push到registry仓库中"><a href="#将一个镜像push到registry仓库中" class="headerlink" title="将一个镜像push到registry仓库中"></a>将一个镜像push到registry仓库中</h4><pre><code>docker push</code></pre><h4 id="获取Container-IP地址（Container状态必须是Up）"><a href="#获取Container-IP地址（Container状态必须是Up）" class="headerlink" title="获取Container IP地址（Container状态必须是Up）"></a>获取Container IP地址（Container状态必须是Up）</h4><pre><code>docker inspect id | grep IPAddress | cut -d &apos;&quot;&apos; -f 4</code></pre><h4 id="获取端口映射"><a href="#获取端口映射" class="headerlink" title="获取端口映射"></a>获取端口映射</h4><pre><code>docker inspect -f &apos;{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -&gt; {{(index $conf 0).HostPort}} {{end}}&apos; id</code></pre><h4 id="获取环境变量"><a href="#获取环境变量" class="headerlink" title="获取环境变量"></a>获取环境变量</h4><pre><code>docker exec container_id env</code></pre><h4 id="杀掉所有正在运行的容器"><a href="#杀掉所有正在运行的容器" class="headerlink" title="杀掉所有正在运行的容器"></a>杀掉所有正在运行的容器</h4><pre><code>docker kill $(docker ps -q)</code></pre><h4 id="删除老的-一周前创建-容器"><a href="#删除老的-一周前创建-容器" class="headerlink" title="删除老的(一周前创建)容器"></a>删除老的(一周前创建)容器</h4><pre><code>docker ps -a | grep &apos;weeks ago&apos; | awk &apos;{print $1}&apos; | xargs docker rm</code></pre><h4 id="删除已经停止的容器"><a href="#删除已经停止的容器" class="headerlink" title="删除已经停止的容器"></a>删除已经停止的容器</h4><pre><code>docker rm `docker ps -a -q`</code></pre><h4 id="删除所有镜像，小心"><a href="#删除所有镜像，小心" class="headerlink" title="删除所有镜像，小心"></a>删除所有镜像，小心</h4><pre><code>docker rmi $(docker images -q)</code></pre><h3 id="Dockerfile"><a href="#Dockerfile" class="headerlink" title="Dockerfile"></a>Dockerfile</h3><h4 id="Dockerfile是docker构建镜像的基础，也是docker区别于其他容器的重要特征，正是有了Dockerfile，docker的自动化和可移植性才成为可能。"><a href="#Dockerfile是docker构建镜像的基础，也是docker区别于其他容器的重要特征，正是有了Dockerfile，docker的自动化和可移植性才成为可能。" class="headerlink" title="Dockerfile是docker构建镜像的基础，也是docker区别于其他容器的重要特征，正是有了Dockerfile，docker的自动化和可移植性才成为可能。"></a>Dockerfile是docker构建镜像的基础，也是docker区别于其他容器的重要特征，正是有了Dockerfile，docker的自动化和可移植性才成为可能。</h4><p>不论是开发还是运维，学会编写Dockerfile几乎是必备的，这有助于你理解整个容器的运行。<br>    FROM , 从一个基础镜像构建新的镜像<br>    FROM ubuntu</p>
<pre><code>MAINTAINER , 维护者信息
MAINTAINER William

ENV , 设置环境变量
ENV TEST 1

RUN , 非交互式运行shell命令
RUN apt-get -y update
RUN apt-get -y install nginx

ADD , 将外部文件拷贝到镜像里,src可以为url
ADD http://nicescale.com/  /data/nicescale.tgz

WORKDIR /path/to/workdir, 设置工作目录
WORKDIR /var/www

USER , 设置用户ID
USER nginx

VULUME &lt;#dir&gt;, 设置volume
VOLUME [‘/data’]

EXPOSE , 暴露哪些端口
EXPOSE 80 443

ENTRYPOINT [‘executable’, ‘param1’,’param2’]执行命令
ENTRYPOINT [&quot;/usr/sbin/nginx&quot;]

CMD [“param1”,”param2”]
CMD [&quot;start&quot;]</code></pre><p>docker创建、启动container时执行的命令，如果设置了ENTRYPOINT，则CMD将作为参数</p>
<h3 id="Dockerfile最佳实践"><a href="#Dockerfile最佳实践" class="headerlink" title="Dockerfile最佳实践"></a>Dockerfile最佳实践</h3><h4 id="尽量将一些常用不变的指令放到前面"><a href="#尽量将一些常用不变的指令放到前面" class="headerlink" title="尽量将一些常用不变的指令放到前面"></a>尽量将一些常用不变的指令放到前面</h4><p>CMD和ENTRYPOINT尽量使用json数组方式</p>
<h4 id="通过Dockerfile构建image"><a href="#通过Dockerfile构建image" class="headerlink" title="通过Dockerfile构建image"></a>通过Dockerfile构建image</h4><pre><code>docker build csphere/nginx:1.7 .</code></pre><h3 id="镜像仓库Registry"><a href="#镜像仓库Registry" class="headerlink" title="镜像仓库Registry"></a>镜像仓库Registry</h3><h4 id="镜像从Dockerfile-build生成后，需要将镜像推送-push-到镜像仓库。企业内部都需要构建一个私有docker-registry，这个registry可以看作二进制的scm，CI-CD也需要围绕registry进行。"><a href="#镜像从Dockerfile-build生成后，需要将镜像推送-push-到镜像仓库。企业内部都需要构建一个私有docker-registry，这个registry可以看作二进制的scm，CI-CD也需要围绕registry进行。" class="headerlink" title="镜像从Dockerfile build生成后，需要将镜像推送(push)到镜像仓库。企业内部都需要构建一个私有docker registry，这个registry可以看作二进制的scm，CI/CD也需要围绕registry进行。"></a>镜像从Dockerfile build生成后，需要将镜像推送(push)到镜像仓库。企业内部都需要构建一个私有docker registry，这个registry可以看作二进制的scm，CI/CD也需要围绕registry进行。</h4><h3 id="部署registry"><a href="#部署registry" class="headerlink" title="部署registry"></a>部署registry</h3><pre><code>mkdir /registry
docker run  -p 80:5000  -e STORAGE_PATH=/registry  -v /registry:/registry  registry:2.0</code></pre><h4 id="推送镜像保存到仓库"><a href="#推送镜像保存到仓库" class="headerlink" title="推送镜像保存到仓库"></a>推送镜像保存到仓库</h4><p>假设192.168.1.2是registry仓库的地址：<br>    docker tag  csphere/nginx:1.7 192.168.1.2/csphere/nginx:1.7<br>    docker push 192.168.1.2/csphere/nginx:1.7</p>
<h3 id="几个简单小例子"><a href="#几个简单小例子" class="headerlink" title="几个简单小例子"></a>几个简单小例子</h3><h3 id="容器操作"><a href="#容器操作" class="headerlink" title="容器操作"></a>容器操作</h3><h4 id="1-创建并拉取redis"><a href="#1-创建并拉取redis" class="headerlink" title="1.创建并拉取redis"></a>1.创建并拉取redis</h4><pre><code>docker pull redis:latest</code></pre><h4 id="2-创建测试容器"><a href="#2-创建测试容器" class="headerlink" title="2.创建测试容器"></a>2.创建测试容器</h4><pre><code>docker run -d --name xxx redis/test:0.1
efc9bda4a2ff2f479b18e0fc4698e42c47c9583a24c93f5ce6b28a828a172709</code></pre><h4 id="3-登陆到xxx中"><a href="#3-登陆到xxx中" class="headerlink" title="3.登陆到xxx中"></a>3.登陆到xxx中</h4><pre><code>docker exec -it con03 /bin/bash
[root@... /]# exit</code></pre>
        </div>
        
    <div id='gitalk-container' class="comment link"
        data-ae='false'
        data-ci='eeec43124e53633945c0'
        data-cs='e2332cffb30ae24f185c1701286958cddd748ffb'
        data-r='kyralo.github.io'
        data-o='kyralo'
        data-a='kyralo'
        data-d='false'
    >查看评论</div>


    </div>
    
        <div class='side'>
            <ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#容器相关操作"><span class="toc-number">1.</span> <span class="toc-text">容器相关操作</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#创建一个容器但是不启动它"><span class="toc-number">1.1.</span> <span class="toc-text">创建一个容器但是不启动它</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#创建并启动一个容器"><span class="toc-number">1.2.</span> <span class="toc-text">创建并启动一个容器</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#停止容器运行，发送信号SIGTERM"><span class="toc-number">1.3.</span> <span class="toc-text">停止容器运行，发送信号SIGTERM</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#启动一个停止状态的容器"><span class="toc-number">1.4.</span> <span class="toc-text">启动一个停止状态的容器</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#重启一个容器"><span class="toc-number">1.5.</span> <span class="toc-text">重启一个容器</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#删除一个容器"><span class="toc-number">1.6.</span> <span class="toc-text">删除一个容器</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#发送信号给容器，默认SIGKILL"><span class="toc-number">1.7.</span> <span class="toc-text">发送信号给容器，默认SIGKILL</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#连接-进入-到一个正在运行的容器"><span class="toc-number">1.8.</span> <span class="toc-text">连接(进入)到一个正在运行的容器</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#阻塞到一个容器，直到容器停止运行"><span class="toc-number">1.9.</span> <span class="toc-text">阻塞到一个容器，直到容器停止运行</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#获取容器相关信息"><span class="toc-number">1.10.</span> <span class="toc-text">获取容器相关信息</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#显示状态为运行（Up）的容器"><span class="toc-number">1.11.</span> <span class="toc-text">显示状态为运行（Up）的容器</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#显示所有容器-包括运行中（Up）的和退出的-Exited"><span class="toc-number">1.12.</span> <span class="toc-text">显示所有容器,包括运行中（Up）的和退出的(Exited)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#深入容器内部获取容器所有信息"><span class="toc-number">1.13.</span> <span class="toc-text">深入容器内部获取容器所有信息</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#查看容器的日志-stdout-stderr"><span class="toc-number">1.14.</span> <span class="toc-text">查看容器的日志(stdout/stderr)</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#得到docker服务器的实时的事件"><span class="toc-number">1.15.</span> <span class="toc-text">得到docker服务器的实时的事件</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#显示容器的端口映射"><span class="toc-number">1.16.</span> <span class="toc-text">显示容器的端口映射</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#显示容器的进程信息"><span class="toc-number">1.17.</span> <span class="toc-text">显示容器的进程信息</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#显示容器文件系统的前后变化"><span class="toc-number">1.18.</span> <span class="toc-text">显示容器文件系统的前后变化</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#导出容器"><span class="toc-number">1.19.</span> <span class="toc-text">导出容器</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#从容器里向外拷贝文件或目录"><span class="toc-number">1.20.</span> <span class="toc-text">从容器里向外拷贝文件或目录</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#将容器整个文件系统导出为一个tar包，不带layers、tag等信息"><span class="toc-number">1.21.</span> <span class="toc-text">将容器整个文件系统导出为一个tar包，不带layers、tag等信息</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#执行"><span class="toc-number">1.22.</span> <span class="toc-text">执行</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#在容器里执行一个命令，可以执行bash进入交互式"><span class="toc-number">1.23.</span> <span class="toc-text">在容器里执行一个命令，可以执行bash进入交互式</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#镜像操作"><span class="toc-number">2.</span> <span class="toc-text">镜像操作</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#显示本地所有的镜像列表"><span class="toc-number">2.1.</span> <span class="toc-text">显示本地所有的镜像列表</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#从一个tar包创建一个镜像，往往和export结合使用"><span class="toc-number">2.2.</span> <span class="toc-text">从一个tar包创建一个镜像，往往和export结合使用</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#使用Dockerfile创建镜像（推荐）"><span class="toc-number">2.3.</span> <span class="toc-text">使用Dockerfile创建镜像（推荐）</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#从容器创建镜像"><span class="toc-number">2.4.</span> <span class="toc-text">从容器创建镜像</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#删除一个镜像"><span class="toc-number">2.5.</span> <span class="toc-text">删除一个镜像</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#从一个tar包创建一个镜像，和save配合使用"><span class="toc-number">2.6.</span> <span class="toc-text">从一个tar包创建一个镜像，和save配合使用</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#将一个镜像保存为一个tar包，带layers和tag信息"><span class="toc-number">2.7.</span> <span class="toc-text">将一个镜像保存为一个tar包，带layers和tag信息</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#显示生成一个镜像的历史命令"><span class="toc-number">2.8.</span> <span class="toc-text">显示生成一个镜像的历史命令</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#为镜像起一个别名"><span class="toc-number">2.9.</span> <span class="toc-text">为镜像起一个别名</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#镜像仓库-registry-操作"><span class="toc-number">3.</span> <span class="toc-text">镜像仓库(registry)操作</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#登录到一个registry"><span class="toc-number">3.1.</span> <span class="toc-text">登录到一个registry</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#从registry仓库搜索镜像"><span class="toc-number">3.2.</span> <span class="toc-text">从registry仓库搜索镜像</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#从仓库下载镜像到本地"><span class="toc-number">3.3.</span> <span class="toc-text">从仓库下载镜像到本地</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#将一个镜像push到registry仓库中"><span class="toc-number">3.4.</span> <span class="toc-text">将一个镜像push到registry仓库中</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#获取Container-IP地址（Container状态必须是Up）"><span class="toc-number">3.5.</span> <span class="toc-text">获取Container IP地址（Container状态必须是Up）</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#获取端口映射"><span class="toc-number">3.6.</span> <span class="toc-text">获取端口映射</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#获取环境变量"><span class="toc-number">3.7.</span> <span class="toc-text">获取环境变量</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#杀掉所有正在运行的容器"><span class="toc-number">3.8.</span> <span class="toc-text">杀掉所有正在运行的容器</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#删除老的-一周前创建-容器"><span class="toc-number">3.9.</span> <span class="toc-text">删除老的(一周前创建)容器</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#删除已经停止的容器"><span class="toc-number">3.10.</span> <span class="toc-text">删除已经停止的容器</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#删除所有镜像，小心"><span class="toc-number">3.11.</span> <span class="toc-text">删除所有镜像，小心</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Dockerfile"><span class="toc-number">4.</span> <span class="toc-text">Dockerfile</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#Dockerfile是docker构建镜像的基础，也是docker区别于其他容器的重要特征，正是有了Dockerfile，docker的自动化和可移植性才成为可能。"><span class="toc-number">4.1.</span> <span class="toc-text">Dockerfile是docker构建镜像的基础，也是docker区别于其他容器的重要特征，正是有了Dockerfile，docker的自动化和可移植性才成为可能。</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#Dockerfile最佳实践"><span class="toc-number">5.</span> <span class="toc-text">Dockerfile最佳实践</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#尽量将一些常用不变的指令放到前面"><span class="toc-number">5.1.</span> <span class="toc-text">尽量将一些常用不变的指令放到前面</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#通过Dockerfile构建image"><span class="toc-number">5.2.</span> <span class="toc-text">通过Dockerfile构建image</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#镜像仓库Registry"><span class="toc-number">6.</span> <span class="toc-text">镜像仓库Registry</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#镜像从Dockerfile-build生成后，需要将镜像推送-push-到镜像仓库。企业内部都需要构建一个私有docker-registry，这个registry可以看作二进制的scm，CI-CD也需要围绕registry进行。"><span class="toc-number">6.1.</span> <span class="toc-text">镜像从Dockerfile build生成后，需要将镜像推送(push)到镜像仓库。企业内部都需要构建一个私有docker registry，这个registry可以看作二进制的scm，CI/CD也需要围绕registry进行。</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#部署registry"><span class="toc-number">7.</span> <span class="toc-text">部署registry</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#推送镜像保存到仓库"><span class="toc-number">7.1.</span> <span class="toc-text">推送镜像保存到仓库</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#几个简单小例子"><span class="toc-number">8.</span> <span class="toc-text">几个简单小例子</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#容器操作"><span class="toc-number">9.</span> <span class="toc-text">容器操作</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#1-创建并拉取redis"><span class="toc-number">9.1.</span> <span class="toc-text">1.创建并拉取redis</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#2-创建测试容器"><span class="toc-number">9.2.</span> <span class="toc-text">2.创建测试容器</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#3-登陆到xxx中"><span class="toc-number">9.3.</span> <span class="toc-text">3.登陆到xxx中</span></a></li></ol></li></ol>
        </div>
    
</div>


    </div>
</div>
</body>
<script src="//cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js"></script>
<script src="//lib.baomitu.com/jquery/1.8.3/jquery.min.js"></script>
<script src="//cdn.jsdelivr.net/gh/kyralo/cdn/js/plugin.js"></script>
<script src="//cdn.jsdelivr.net/gh/kyralo/cdn/js/diaspora.js"></script>
<link rel="stylesheet" href="//cdn.jsdelivr.net/gh/kyralo/cdn/css/photoswipe.css">
<link rel="stylesheet" href="//cdn.jsdelivr.net/gh/kyralo/cdn/css/default-skin.css">
<script src="//cdn.jsdelivr.net/gh/kyralo/cdn/js/photoswipe.min.js"></script>
<script src="//cdn.jsdelivr.net/gh/kyralo/cdn/js/photoswipe-ui-default.min.js"></script>

<!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
    <!-- Background of PhotoSwipe. 
         It's a separate element as animating opacity is faster than rgba(). -->
    <div class="pswp__bg"></div>
    <!-- Slides wrapper with overflow:hidden. -->
    <div class="pswp__scroll-wrap">
        <!-- Container that holds slides. 
            PhotoSwipe keeps only 3 of them in the DOM to save memory.
            Don't modify these 3 pswp__item elements, data is added later on. -->
        <div class="pswp__container">
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
        </div>
        <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
        <div class="pswp__ui pswp__ui--hidden">
            <div class="pswp__top-bar">
                <!--  Controls are self-explanatory. Order can be changed. -->
                <div class="pswp__counter"></div>
                <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
                <button class="pswp__button pswp__button--share" title="Share"></button>
                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
                <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
                <!-- element will get class pswp__preloader--active when preloader is running -->
                <div class="pswp__preloader">
                    <div class="pswp__preloader__icn">
                      <div class="pswp__preloader__cut">
                        <div class="pswp__preloader__donut"></div>
                      </div>
                    </div>
                </div>
            </div>
            <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
                <div class="pswp__share-tooltip"></div> 
            </div>
            <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
            </button>
            <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
            </button>
            <div class="pswp__caption">
                <div class="pswp__caption__center"></div>
            </div>
        </div>
    </div>
</div>



<!-- Google Analytics -->
<script type="text/javascript">
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-146789315-1', 'auto');
  ga('send', 'pageview');
</script>
<!-- End Google Analytics -->


<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.css">
<script src="https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js"></script>
<style>
  .aplayer .aplayer-lrc {
    height: 35px;
  }
  .aplayer .aplayer-lrc p{
    font-size: 16px;
    font-weight: 700;
    line-height: 18px !important;
  }
  .aplayer .aplayer-lrc p.aplayer-lrc-current{
    color: #FF1493;
  }
  .aplayer.aplayer-narrow .aplayer-body{
    left: -66px !important;
  }
  .aplayer.aplayer-fixed .aplayer-lrc {
    display: none;
  }
  .aplayer .aplayer-lrc.aplayer-lrc-hide {
      display:none !important;
  }
  .aplayer.aplayer-fixed .lrc-show {
    display: block;
    background: rgba(255, 255, 255, 0.8);
  }
</style>
<div class="aplayer"

    data-id="2725346449"

    data-server="netease"

    data-type="playlist"

    data-fixed="true"

    data-autoplay="false"

    data-loop="all"

    data-order="random"

    data-preload="auto"

    data-volume="0.7"

    data-mutex="true"

</div>
<script src="https://cdn.jsdelivr.net/npm/meting@1.2/dist/Meting.min.js"></script>
<script>
  $(function(){
    $('body').on('click', '.aplayer', function(){
      if($('.aplayer-button').hasClass('aplayer-play')) {
        $('.aplayer-lrc').removeClass('lrc-show');
      } else {
        $('.aplayer-lrc').addClass('lrc-show');
      }
    })
  });
</script>
</html>
